#通用的日志模块

import os
from logging import getLogger
from logging import config

standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][%(filename)s:%(lineno)d]' \
                  '[%(levelname)s][%(message)s]'
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
test_format = '[%(asctime)s] %(message)s'

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


class LogHander:
    def __init__(self, file='test'):
        self.file = file
        self.LOG_PATH = os.path.join(BASE_DIR, 'logs')
        if not os.path.exists(self.LOG_PATH):
            os.makedirs(self.LOG_PATH)
        config.dictConfig(self.data_init())
        self.logs_init()

    def logs_init(self):
        return getLogger("login")

    def data_init(self):
        """
        日志的配制
        """
        LOGGING_DIC = {
            'version': 1,
            'disable_existing_loggers': False,
            #设置使用日志的类型正常、简单和测试
            'formatters': {
                'standard': {
                    'format': standard_format
                },
                'simple': {
                    'format': simple_format
                },
                'test': {
                    'format': test_format
                },
            },
            'filters': {},
            'handlers': {
                # 打印到终端的日志
                'console': {
                    'level': 'INFO',        #显示的级别
                    'class': 'logging.StreamHandler',  # 打印到屏幕
                    'formatter': 'test'
                },
                # 打印到文件的日志,收集info及以上的日志
                'default': {
                    'level': 'DEBUG',        #保存到文件的级别
                    'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,日志轮转
                    'formatter': 'standard',
                   #保存日志的文件设置
                    'filename': os.path.join(self.LOG_PATH, f"{self.file}.log"),  # 日志文件
                    'maxBytes': 1024 * 1024 * 5,  # 日志大小 5M
                    'backupCount': 5,#备份的数量
                    'encoding': 'utf-8',  # 日志文件的编码，再也不用担心中文log乱码了
                },
            },
            'loggers': {
                # logging.getLogger(__name__)拿到的logger配置
                'login': {
                    'handlers': ['default', 'console'],  # 这里把上面定义的两个handler都加上，即log数据既写入文件又打印到屏幕
                    'level': 'DEBUG',  # loggers(第一层日志级别关限制)--->handlers(第二层日志级别关卡限制)
                    'propagate': False,  # 默认为True，向上（更高level的logger）传递，通常设置为False即可，否则会一份日志向上层层传递
                },
            },
        }
        return LOGGING_DIC
if __name__ == "__main__":
    loghander = LogHander('test12321').logs_init()

    loghander.debug('这是debug显示')
    loghander.info('这是info显示')
    loghander.warning('这是warning显示')
    loghander.error('这是error显示')
    loghander.critical('这是critical显示')